home *** CD-ROM | disk | FTP | other *** search
/ Mac Mania 6 / MacMania 6.toast / / Tools&Utilities / TouchMe 1.2□ / touchMe 1.2 Folder / touchMe source codes / CW11 PP source / source / Common Lib / UAppleEvents.cp < prev    next >
Encoding:
Text File  |  1997-04-25  |  10.0 KB  |  441 lines  |  [TEXT/CWIE]

  1. // ==================================================
  2. //    UAppleEvents.cp
  3. //    Copyright (C) 1996-1997 Mizutori Tetsuya
  4. //    October 5, 1996; February 6, 1997; April 23, 1997.
  5. // ==================================================
  6. //    All documents are pretty-printed in 10-point Geneva font.
  7.  
  8. #include <Aliases.h>
  9.  
  10. #include <UAppleEventsMgr.h>
  11. #include <UExtractFromAEDesc.h>
  12. #include <UMemoryMgr.h>
  13.  
  14. #include "UAppleEvents.h"
  15.  
  16. #define longDateTimeHi( a )    (((LongDateCvt *) &(a))->hl.lHigh)
  17. #define longDateTimeLo( a )    (((LongDateCvt *) &(a))->hl.lLow)
  18.  
  19.  
  20. // ==================================================
  21. //        • Constructors
  22. // ==================================================
  23.  
  24. // --------------------------------------------------
  25. //        • UAppleEvents
  26. // --------------------------------------------------
  27.  
  28. UAppleEvents::UAppleEvents()
  29. {
  30. }
  31.  
  32.  
  33. // --------------------------------------------------
  34. //        • UAppleEvents
  35. // --------------------------------------------------
  36.  
  37. UAppleEvents::~UAppleEvents()
  38. {
  39. }
  40.  
  41.  
  42. // ==================================================
  43. //        • Common functions
  44. // ==================================================
  45.  
  46. // ==================================================
  47. //        • Handling descriptor
  48. // ==================================================
  49.  
  50. // --------------------------------------------------
  51. //        • TheLongDateTime
  52. // --------------------------------------------------
  53.  
  54. // Making a 'TheLongDateTime()' function from a template.
  55. // See also examples in the source code 'UExtractFromAEDesc.cp'.
  56.  
  57. #ifdef COMMENT
  58. static void
  59. UAppleEvents::TheLongDateTime(
  60.     const AEDesc &        inDesc,
  61.     LongDateTime &        outValue );
  62. #endif // COMMENT
  63.  
  64. // --------------------------------------------------
  65. #undef        Extractor_Name
  66. #undef        C_DataType
  67. #undef        AE_DataType
  68.  
  69. #define        Extractor_Name        TheLongDateTime
  70. #define        C_DataType        LongDateTime
  71. #define        AE_DataType        typeLongDateTime
  72.  
  73. #undef        UExtractFromAEDesc
  74. #define        UExtractFromAEDesc    UAppleEvents
  75. #include <AEDescExtractor.t>
  76. #undef        UExtractFromAEDesc
  77. // --------------------------------------------------
  78.  
  79.  
  80.  
  81. // --------------------------------------------------
  82. //        • TheText
  83. // --------------------------------------------------
  84.  
  85. void
  86. UAppleEvents::TheText(
  87.     const AEDesc &        inDesc,
  88.     Handle &            outTextH,
  89.     long &            outTextLen )
  90. {
  91.     if ( inDesc.descriptorType != typeChar )
  92.         ThrowOSErr_( errAETypeError );
  93.  
  94.     outTextH = inDesc.dataHandle;
  95.     outTextLen = ::GetHandleSize( outTextH );
  96. }
  97.  
  98.  
  99. // --------------------------------------------------
  100. //        • TheFSSpec
  101. // --------------------------------------------------
  102.  
  103. void
  104. UAppleEvents::TheFSSpec(
  105.     const AEDesc &        inDesc,
  106.     FSSpec &            outFSSpec )
  107. {
  108.     switch ( inDesc.descriptorType ) {
  109.         case typeFSS:
  110.         {
  111.             outFSSpec = * (FSSpec *) * inDesc.dataHandle;
  112.         }
  113.             break;
  114.  
  115.         case typeAlias:
  116.         {
  117.             StAEDescriptor    theDesc;
  118.             OSErr    err = ::AECoerceDesc( &inDesc, typeFSS, &theDesc.mDesc );
  119.             ThrowIfOSErr_( err );
  120.             outFSSpec = * (FSSpec *) * theDesc.mDesc.dataHandle;
  121.         }
  122.             break;
  123.  
  124.         default:
  125.             ThrowOSErr_( errAETypeError );
  126.             break;
  127.     }
  128. }
  129.  
  130.  
  131. // ==================================================
  132. //        • Handling Apple Event
  133. // ==================================================
  134.  
  135. // --------------------------------------------------
  136. //        • GetParamLongDateTime
  137. // --------------------------------------------------
  138.  
  139. Boolean
  140. UAppleEvents::GetParamLongDateTime(
  141.     const AppleEvent &    inAppleEvent,
  142.     AEKeyword            inKeyword,
  143.     LongDateTime &        outValue,
  144.     const unsigned long    defaultValue )    //    = 0
  145. {
  146.     Boolean            result = true;
  147.     StAEDescriptor        theDesc;
  148.  
  149.     theDesc.GetOptionalParamDesc( inAppleEvent, inKeyword, typeLongDateTime );
  150.  
  151.     if ( theDesc.mDesc.descriptorType != typeNull )
  152.         UAppleEvents::TheLongDateTime( theDesc.mDesc, outValue );
  153.     else {
  154.         longDateTimeHi( outValue ) = 0;
  155.         longDateTimeLo( outValue ) = defaultValue;
  156.         result = false;
  157.     }
  158.  
  159.     return result;
  160. }
  161.  
  162.  
  163. // --------------------------------------------------
  164. //        • GetParamLong
  165. // --------------------------------------------------
  166.  
  167. Boolean
  168. UAppleEvents::GetParamLong(
  169.     const AppleEvent &    inAppleEvent,
  170.     AEKeyword            inKeyword,
  171.     long &            outValue,
  172.     const long            defaultValue )    //    = 0
  173. {
  174.     Boolean            result = true;
  175.     StAEDescriptor        theDesc;
  176.  
  177.     theDesc.GetOptionalParamDesc( inAppleEvent, inKeyword, typeLongInteger );
  178.  
  179.     if ( theDesc.mDesc.descriptorType != typeNull )
  180.         UExtractFromAEDesc::TheInt32( theDesc.mDesc, outValue );
  181.     else {
  182.         outValue = defaultValue;
  183.         result = false;
  184.     }
  185.  
  186.     return result;
  187. }
  188.  
  189.  
  190. // --------------------------------------------------
  191. //        • GetParamEnum
  192. // --------------------------------------------------
  193.  
  194. Boolean
  195. UAppleEvents::GetParamEnum(
  196.     const AppleEvent &    inAppleEvent,
  197.     AEKeyword            inKeyword,
  198.     OSType &            outValue,
  199.     const OSType        defaultValue )    //    = typeNull
  200. {
  201.     Boolean            result = true;
  202.     StAEDescriptor        theDesc;
  203.  
  204.     theDesc.GetOptionalParamDesc( inAppleEvent, inKeyword, typeEnumerated );
  205.  
  206.     if ( theDesc.mDesc.descriptorType != typeNull ) {
  207.         UExtractFromAEDesc::TheEnum( theDesc.mDesc, outValue );
  208.     } else {
  209.         outValue = defaultValue;
  210.         result = false;
  211.     }
  212.  
  213.     return result;
  214. }
  215.  
  216.  
  217. // --------------------------------------------------
  218. //        • GetParamBoolean
  219. // --------------------------------------------------
  220.  
  221. Boolean
  222. UAppleEvents::GetParamBoolean(
  223.     const AppleEvent &    inAppleEvent,
  224.     AEKeyword            inKeyword,
  225.     Boolean &            outValue,
  226.     const Boolean        defaultValue )    //    = true
  227. {
  228.     Boolean            result = true;
  229.     StAEDescriptor        theDesc;
  230.  
  231.     theDesc.GetOptionalParamDesc( inAppleEvent, inKeyword, typeBoolean );
  232.  
  233.     if ( theDesc.mDesc.descriptorType != typeNull ) {
  234.         UExtractFromAEDesc::TheBoolean( theDesc.mDesc, outValue );
  235.     } else {
  236.         outValue = defaultValue;
  237.         result = false;
  238.     }
  239.  
  240.     return result;
  241. }
  242.  
  243.  
  244. // --------------------------------------------------
  245. //        • GetParamPString
  246. // --------------------------------------------------
  247.  
  248. Boolean
  249. UAppleEvents::GetParamPString(
  250.     const AppleEvent &    inAppleEvent,
  251.     AEKeyword            inKeyword,
  252.     Str255            outString,
  253.     const StringPtr        defaultString )    //    = "\p"
  254. {
  255.     Boolean            result = true;
  256.     StAEDescriptor        theDesc;
  257.  
  258.     theDesc.GetOptionalParamDesc( inAppleEvent, inKeyword, typeChar );
  259.  
  260.     if ( theDesc.mDesc.descriptorType != typeNull ) {
  261.         UExtractFromAEDesc::ThePString( theDesc.mDesc, outString );
  262.     } else {
  263. //        UTextword::PStrCopy( outString, defaultString );
  264.         ::BlockMoveData( &defaultString[0], &outString[0], defaultString[0]+1 );
  265.         result = false;
  266.     }
  267.  
  268.     return result;
  269. }
  270.  
  271.  
  272. // --------------------------------------------------
  273. //        • GetParamText
  274. // --------------------------------------------------
  275.  
  276. Boolean
  277. UAppleEvents::GetParamText(
  278.     const AppleEvent &    inAppleEvent,
  279.     AEKeyword            inKeyword,
  280.     Handle            theTextH,
  281.     long &            theTextLen )
  282. {
  283.     Boolean            result = true;
  284.     StAEDescriptor        theDesc;
  285.  
  286.     theDesc.GetOptionalParamDesc( inAppleEvent, inKeyword, typeChar );
  287.  
  288.     if ( theDesc.mDesc.descriptorType != typeNull ) {
  289.         Handle    theDataH = theDesc.mDesc.dataHandle;
  290.         theTextLen = ::GetHandleSize( theDataH );
  291.         ::SetHandleSize( theTextH, theTextLen );
  292.         ThrowIfOSErr_( ::MemError() );
  293.         ::BlockMoveData( *theDataH, *theTextH, theTextLen );
  294.     } else {
  295.         theTextLen = 0;
  296.         ::SetHandleSize( theTextH, theTextLen );
  297.         ThrowIfOSErr_( ::MemError() );
  298.         result = false;
  299.     }
  300.  
  301.     return result;
  302. }
  303.  
  304.  
  305. // --------------------------------------------------
  306. //        • PutParamText
  307. // --------------------------------------------------
  308.  
  309. void
  310. UAppleEvents::PutParamText(
  311.     AppleEvent &        ioAppleEvent,
  312.     AEKeyword            inKeyword,
  313.     Handle            theTextH,
  314.     long                theTextLen )
  315. {
  316.     StHandleLocker    theHandleLock( theTextH );
  317.  
  318.     StAEDescriptor    theDesc( typeChar, *theTextH, theTextLen );
  319.  
  320.     OSErr    err;
  321.     err = ::AEPutParamDesc( &ioAppleEvent, inKeyword, &theDesc.mDesc );
  322.     ThrowIfOSErr_( err );
  323. }
  324.  
  325.  
  326. // --------------------------------------------------
  327. //        • PutParamFSSpec
  328. // --------------------------------------------------
  329.  
  330. void
  331. UAppleEvents::PutParamFSSpec(
  332.     AppleEvent &        ioAppleEvent,
  333.     AEKeyword            inKeyword,
  334.     const FSSpec &        inFSSpec )
  335. {
  336.     OSErr        err;
  337.  
  338.     AliasHandle    theAliasH;
  339.     err = ::NewAliasMinimal( &inFSSpec, &theAliasH );
  340.     ThrowIfOSErr_( err );
  341.  
  342.     ::HLock( (Handle) theAliasH );
  343.  
  344.     StAEDescriptor    theDesc( typeAlias, (Ptr)*theAliasH, (**theAliasH).aliasSize );
  345.  
  346.     err = ::AEPutParamDesc( &ioAppleEvent, inKeyword, &theDesc.mDesc );
  347.     ThrowIfOSErr_( err );
  348.  
  349.     ::HUnlock( (Handle) theAliasH );
  350.  
  351.     ::DisposeHandle( (Handle) theAliasH );
  352. }
  353.  
  354.  
  355. // --------------------------------------------------
  356. //        • AddFSSpec
  357. // --------------------------------------------------
  358.  
  359. void
  360. UAppleEvents::AddFSSpec(
  361.     AEDescList &        ioDescList,
  362.     long                inIndex,
  363.     const FSSpec &        inFSSpec )
  364. {
  365.     OSErr        err;
  366.  
  367.     AliasHandle    theAliasH;
  368.     err = ::NewAliasMinimal( &inFSSpec, &theAliasH );
  369.     ThrowIfOSErr_( err );
  370.  
  371.     ::HLock( (Handle) theAliasH );
  372.  
  373.     err = ::AEPutPtr( &ioDescList, inIndex, typeAlias,
  374.                 (Ptr) *theAliasH, (**theAliasH).aliasSize );
  375.     ThrowIfOSErr_( err );
  376.  
  377.     ::HUnlock( (Handle) theAliasH );
  378.  
  379.     ::DisposeHandle( (Handle) theAliasH );
  380. }
  381.  
  382.  
  383. // --------------------------------------------------
  384. //        • PutParamFullPathname
  385. // --------------------------------------------------
  386.  
  387. void
  388. UAppleEvents::PutParamFullPathname(
  389.     AppleEvent &        ioAppleEvent,
  390.     AEKeyword            inKeyword,
  391.     ConstStr255Param    inFullPathname )
  392. {
  393.     OSErr        err;
  394.  
  395.     AliasHandle    theAliasH;
  396.     err = ::NewAliasMinimalFromFullPath( inFullPathname[0], &inFullPathname[1], "\p", "\p", &theAliasH );
  397.     ThrowIfOSErr_( err );
  398.  
  399.     ::HLock( (Handle) theAliasH );
  400.  
  401.     StAEDescriptor    theDesc( typeAlias, (Ptr)*theAliasH, (**theAliasH).aliasSize );
  402.  
  403.     err = ::AEPutParamDesc( &ioAppleEvent, inKeyword, &theDesc.mDesc );
  404.     ThrowIfOSErr_( err );
  405.  
  406.     ::HUnlock( (Handle) theAliasH );
  407.  
  408.     ::DisposeHandle( (Handle) theAliasH );
  409. }
  410.  
  411.  
  412. // --------------------------------------------------
  413. //        • AddFullPathname
  414. // --------------------------------------------------
  415.  
  416. void
  417. UAppleEvents::AddFullPathname(
  418.     AEDescList &        ioDescList,
  419.     long                inIndex,
  420.     ConstStr255Param    inFullPathname )
  421. {
  422.     OSErr        err;
  423.  
  424.     AliasHandle    theAliasH;
  425.     err = ::NewAliasMinimalFromFullPath( inFullPathname[0], &inFullPathname[1], "\p", "\p", &theAliasH );
  426.     ThrowIfOSErr_( err );
  427.  
  428.     ::HLock( (Handle) theAliasH );
  429.  
  430.     err = ::AEPutPtr( &ioDescList, inIndex, typeAlias,
  431.                 (Ptr)*theAliasH, (**theAliasH).aliasSize );
  432.     ThrowIfOSErr_( err );
  433.  
  434.     ::HUnlock( (Handle) theAliasH );
  435.  
  436.     ::DisposeHandle( (Handle) theAliasH );
  437. }
  438.  
  439.  
  440. // end of program
  441.